<?php

namespace app\admin\validate\user;

use tmcore\base\BaseValidate;
use tmcore\utils\Helper;

/**
 * 用户验证器
 */
class UserValidate extends BaseValidate
{
    protected $rule = [
        'id' => 'require',
        'account' => 'require|checkName',
        'password' => 'require|checkPassword',
        'mobile' => 'require|checkMobile',
        'sex' => 'in:0,1,2',
        'email' => 'email',
        'status' => 'require|in:1,0',
        'token' => 'require',
    ];

    protected $message = [
        'id.require' => 'id不能为空',
        'account.require' => '账号不能为空',
        'password.require' => '密码不能为空',
        'mobile.require' => '手机号不能为空',
        'status.require' => '状态不能为空',
        'token.require' => 'token不能为空',
    ];

    /**
     * 新增场景
     * @return UserValidate
     */
    public function sceneAdd()
    {
        return $this->only(['account','password','mobile','sex','email','status'])
            ->append('password', 'checkPassword')
            ->append('mobile', 'checkMobile');
    }

    /**
     * 编辑场景
     * @return UserValidate
     */
    public function sceneEdit()
    {
        return $this->only(['id','mobile','sex','email','status'])
            ->append('password', 'checkPassword')
            ->append('mobile', 'checkMobile');
    }

    /**
     * 详情场景
     * @return UserValidate
     */
    public function sceneDetail()
    {
        return $this->only(['id']);
    }

    /**
     * token场景
     * @return UserValidate
     */
    public function sceneToken()
    {
        return $this->only(['id']);
    }

    /**
     * 删除token场景
     * @return UserValidate
     */
    public function sceneDeleteToken()
    {
        return $this->only(['id','token']);
    }

    /**
     * 变更状态场景
     * @return UserValidate
     */
    public function sceneUpdateStatus()
    {
        return $this->only(['id','status']);
    }

    /**
     * 检查账号
     * @param $value
     * @param $rule
     * @param $data
     * @return string|true
     */
    public function checkName($value, $rule, $data) {
        // 6-20位字符，只能包含数字、字母、下划线
        if(!Helper::check_name($value)) return '账号不符合要求,';
        return true;
    }

    /**
     * 检查密码
     * @param $value
     * @param $rule
     * @param $data
     * @return bool|string
     */
    public function checkPassword($value, $rule, $data) {
        // 6-16位，同时包含字母、数字、特殊符号
        if(!Helper::check_password($value)) return '密码不符合要求,';
        return true;
    }

    /**
     * 检查手机号
     * @param $value
     * @param $rule
     * @param $data
     * @return bool|string
     */
    public function checkMobile($value, $rule, $data) {
        if(!Helper::check_mobile($value)) return '手机号不符合要求';
        return true;
    }

}